﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 代码积累.Sql_Server
{
    class SqlServer
    {
        #region 数据库日志清楚 释放空间
        //ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE
        //ALTER DATABASE 数据库名称 SET RECOVERY FULL
        //DBCC SHRINKDATABASE(数据库名称,0)
        #endregion
        #region 去除最大行数
        //IF EXISTS (SELECT name FROM sysobjects WHERE name = '表名_insert' AND type = 'TR')  DROP TRIGGER "表名_insert"
        #endregion
        #region 名称字符用逗号链接
        //Create Table   #TEST       
        //(ID Varchar(10),         Name Nvarchar(10))       
        //Insert   #TEST   Values('01',       N'小张')       
        //Insert   #TEST   Values('01',       N'小王')       
        //Insert   #TEST   Values('02',       N'小王')       
        //Insert   #TEST   Values('02',       N'小陈')
        //Insert   #TEST   Values('02',       N'张三')
        //Insert   #TEST   Values('03',       N'李四')
        //Insert   #TEST   Values('03',       N'王武')  
        //select id,(select name+',' from #TEST where id=t.id for xml path(''))
        // from #TEST t group by id
        //id         --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        //01         小张,小王,
        //02         小王,小陈,张三,
        //03         李四,王武,

        //(3 行受影响)
        //求出WBS包和拼接出来当前WBS包的数据
        //SELECT
        // task_id,
        // (
        //  SELECT
        //   CONVERT (VARCHAR(MAX), userid) + ','
        //  FROM
        //   temp_userid_time
        //  WHERE
        //   task_id = t.task_id and ','+b.userid_list+',' like '%,'+CONVERT (VARCHAR(MAX), userid)+',%'  FOR xml path ('') 
        // ) AS userid1,
        // start_date,
        // end_date,
        // real_end_date,
        // real_start_date,b.MoCode
        //FROM
        // temp_userid_time t,gmis_mo_374 b 
        //GROUP BY
        //b.MoCode,
        // task_id,
        // start_date,
        // end_date,
        // real_end_date,
        // real_start_date,userid_list
        #endregion
        #region 去除字段的单位只留下数字
        //patindex('%[0-9]%.%[0-9]%', value) 数字的第一位
        // patindex('%[^吖-座][吖-座]%', value) 汉字的第一位
        //  patindex('%[^A-z][A-z]%', value) 字母的第一位

        //select*,substring(value, patindex('%[0-9]%.%[0-9]%', value),patindex('%[^吖-座][吖-座]%', value)|patindex('%[^A-z][A-z]%', value)-patindex('%[0-9]%.%[0-9]%', value)),
        //patindex('%[0-9].[0-9]%', value),patindex('%[0-9][^0-9]%', value),patindex('%[ ][^ ]%', value)
        //  from bimProperties where userid in(67720,67763,67677,67594,67420,67760,67440,67697,67614,67783,67700,67483,67657,67740,67414,67417,67480,67437,67500)
        //and propertyname = '面积'


        //REPLACE 替换制定的字母

        //select*,REPLACE(substring(value, patindex('%[0-9]%.%[0-9]%', value),patindex('%[^吖-座][吖-座]%', value)|patindex('%[^A-z][A-z]%', value)-patindex('%[0-9]%.%[0-9]%', value)),' ',''),
        //patindex('%[0-9].[0-9]%', value),patindex('%[0-9][^0-9]%', value),patindex('%[ ][^ ]%', value)
        //  from bimProperties where userid in(67720,67763,67677,67594,67420,67760,67440,67697,67614,67783,67700,67483,67657,67740,67414,67417,67480,67437,67500)
        //and propertyname = '面积'
        #endregion
        #region 把一些SQL进行字段替换
        //Number 为待替换的字段
        //CHARINDEX 判断前面的字符串是否在后面的字符串中 如果在就返回该字符串的位置 负责返回0 参数1在Number的位置
        //LEN 获得当前参数的长度
        //STUFF 删除指定长度的字符  
        //STUFF(
        // Number,//待处理的字符串 字段
        //CHARINDEX(参数1, Number),//开始长度
        //LEN(参数1),//需要处理的长度
        //'" + 参数2 + @"' //删除后拼接的字符串
        //) Number
        //stuff('abcdef',2,3,'ijklmn') 返回 aijklmn
        #endregion
        #region 字符串进行截取
        //abdcda 需要截取的字段
        //2为开始的位置
        //4 需要截取的位数
        //SUBSTRING('abdcda',2,4) bdcd
        #endregion
        #region 设置用户只有查看权限
        //设置用户只有查看权限
        //USE[master]   --切换到指定的数据库
        //GO
        //---创建登入名
        //    CREATE LOGIN[person] WITH PASSWORD=N'person', DEFAULT_DATABASE=[news], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF   创建用户
        //    GO
        //USE[news]
        //GO
        //---在指定的数据库下创建和登入名相关联的数据库用户
        //    CREATE USER[person] FOR LOGIN[person]    指定用户和当前数据库的关系
        //GO
        //    USE[news]
        //GO
        //---在指定的数据库下授予用户SELECT,DELETE,UPDATE,INSERT,EXECUTE权限。
        //GRANT SELECT, DELETE, UPDATE, INSERT, EXECUTE TO person; 创建权限
        #endregion
        #region 清空数据库的全部数据
        //清空NewdataName数据库的全部数据
        //DECLARE[" + NewdataName + @"] CURSOR
        //    FOR
        //SELECT name FROM sysobjects
        //WHERE type = 'U' --选择用户表名
        //    OPEN[" + NewdataName + @"] --打开游标连接
        //    DECLARE @tablename sysname   --// 定义变量  
        //FETCH NEXT FROM[" + NewdataName + @"] INTO @tablename   --结果集中一行一行读取表名
        //    WHILE(@@FETCH_STATUS<> -1) --判断游标状态
        //    BEGIN
        //EXEC('TRUNCATE TABLE ' + @tablename)   --清空表中的数据
        //    FETCH NEXT FROM[" + NewdataName + @"] INTO @tablename --下一行数据
        //    END
        //CLOSE[" + NewdataName + @"]
        //DEALLOCATE[" + NewdataName + @"] --关闭游标
        #endregion

        #region 根据某种排序规则 创建数据库 
        //根据某种排序规则 创建数据库 MyOptionsTest数据库名称 Latin1_General_100_CS_AS_SC排序规则
        //USE master;
        //GO
        //    IF DB_ID(N'MyOptionsTest') IS NOT NULL
        //    DROP DATABASE MyOptionsTest;
        //GO
        //    CREATE DATABASE MyOptionsTest
        //COLLATE Latin1_General_100_CS_AS_SC;
        //GO  

        //--Verify the collation setting.
        //    SELECT name, collation_name
        //    FROM sys.databases
        //    WHERE name = N'MyOptionsTest';
        //GO
        #endregion

        #region MyRegion
        //更改数据库排序规则  MyOptionsTest 数据库名称  French_CI_AS 待修改规则
        //USE master; 
        //GO
        //    ALTER DATABASE MyOptionsTest
        //COLLATE French_CI_AS;
        //GO  

        //--Verify the collation setting.
        //    SELECT name, collation_name
        //    FROM sys.databases
        //    WHERE name = N'MyOptionsTest';
        //GO


        #endregion
        #region 分页
        //select* from(SELECT ROW_NUMBER() OVER (ORDER BY ord.id DESC) AS bianhao,  ordername, ordernum,whether FROM t_order ) as temp where temp.bianhao BETWEEN " + (开始条数) + " and " + (结束条数)
        #endregion
        //Distinct 去重复
        //sum 求某个字段的和
        //count(*) 获得一共多少条元素
    }
}
